This struct uses 2 data types:
- CMList memoryPool - Each time a new data has to be stored, we check if there are available items in this memoryPool, if yes, we use the sorted array from section 2 to point to that data and it is removed from this memoryPool, if not, we add a new node to this memoryPool and repeat the scenario from above.
- void **items - This is a cyclic sorted array of pointers. Each time a new data has to be stored, we query the memoryPool from above for a new memory block and point to the returned block, when done we return the memory block back to the memoryPool.